#ifndef DATAFLOW_ARGUMENTARRAY_H
#define DATAFLOW_ARGUMENTARRAY_H

#include <QSharedDataPointer>

#include "ArgumentVectorPrivate.h"

namespace DataFlow
{

class ArgumentArray
{
	public:

		typedef void          BaseType;
		typedef ArgumentArray ThisType;

		ArgumentArray(void)
		{
			this->d = new Detail::ArgumentVectorPrivate();
		}

		ArgumentArray(const ThisType & other)
			: d(other.d)
		{
			;
		}

		ArgumentArray(int id, int size)
		{
			this->d = new Detail::ArgumentVectorPrivate(id, size);
		}

		void setId(int id)
		{
			this->d->setId(id);
		}

		int id(void) const
		{
			return this->d->id();
		}

		int size(void) const
		{
			return this->d->size();
		}

		/*
		bool isValid(void) const
		{
			return this->d->isValid();
		}
		*/

		Argument & at(int index)
		{
			return this->d->at(index);
		}

		const Argument & at(int index) const
		{
			return this->d->at(index);
		}

		Argument & operator [] (int index)
		{
			return (*(this->d))[index];
		}

		const Argument & operator [] (int index) const
		{
			return (*(this->d))[index];
		}

	protected:

		 QSharedDataPointer<Detail::ArgumentVectorPrivate> d;
};

}

Q_DECLARE_METATYPE(DataFlow::ArgumentArray)

#endif // DATAFLOW_ARGUMENTARRAY_H
